package com.upc.cajabancos.dao;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

import oracle.jdbc.driver.OracleResultSet;
import oracle.jdbc.driver.OracleTypes;

import com.upc.cajabancos.model.EstadoCuenta;
import com.upc.cajabancos.util.DataAccessObjetc;

public class EstadoCuentaDAO {
	
	private Connection connection = null;
	
	public EstadoCuentaDAO(Connection connection){
		this.connection = connection;
	}
	
	/**
	 * Obtiene el estado de cuenta de un cliente
	 * @author Cesar Jesus
	 * @since 30/01/2011
	 * @param codCliente
	 * @return EstadoCuenta
	 */	
	public EstadoCuenta obtener(String codCliente) throws Exception{
		CallableStatement cstmt = null;	
		ResultSet rs = null;
		EstadoCuenta estadoCuenta = null;
    	
    	try{
			
			cstmt = connection.prepareCall(DataAccessObjetc.buildProcedureCall("OBTENER_ESTADOCUENTA",2));
			
			cstmt.setString(1, codCliente);
			cstmt.registerOutParameter(2, OracleTypes.CURSOR);
			cstmt.execute();
			rs = (OracleResultSet)cstmt.getObject(2);
			
			while (rs.next()){
				estadoCuenta = new EstadoCuenta(rs.getString("Co_EstadoCuenta"));
				estadoCuenta.setFechaEmision(rs.getDate("Fe_FechaEmision"));
				estadoCuenta.setPeriodo(rs.getString("no_detalle"));
				estadoCuenta.setTotalPagar(rs.getDouble("SS_TotalPagar"));
			}
			
    	}
    	catch(Exception e){
    		throw e;
    	}
    	finally {
    		DataAccessObjetc.close(null,cstmt,rs);
		}
    	
    	return estadoCuenta;
    }
	
	public void actualizar(EstadoCuenta estadoCuenta) throws Exception{
		
		CallableStatement cst= null;
		
		try{
			cst= connection.prepareCall(DataAccessObjetc.buildProcedureCall("ACTUALIZAR_ESTCTA",3));
			cst.setString(1, estadoCuenta.getCodigo());
			cst.setString(2, estadoCuenta.getEstado());
			cst.setDouble(3, estadoCuenta.getTotalPagar());
			
			cst.execute();
			
		}
		catch(Exception e){
			e.printStackTrace();
			throw e;
		}
		finally{
			
			DataAccessObjetc.close(null, cst, null);
		}
	}

}
